diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

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

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

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

    tap

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchend

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

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

    touchendoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    touchstart

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

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

    anchor

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

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

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

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

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

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

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

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

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

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

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

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

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

    position

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

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

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

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

    scale

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

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

    stage

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

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

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

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

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

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

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

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

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

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

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

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

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

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

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseout

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseover

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseup

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

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

    +
    + + +
    +

    Parameters:

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

    mouseupoutside

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

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

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

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

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

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 6 - Interactivity/pixi.js +++ b/examples/example 6 - Interactivity/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 6 - Interactivity/pixi.js +++ b/examples/example 6 - Interactivity/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 7 - Transparent Background/pixi.js b/examples/example 7 - Transparent Background/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 7 - Transparent Background/pixi.js +++ b/examples/example 7 - Transparent Background/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 6 - Interactivity/pixi.js +++ b/examples/example 6 - Interactivity/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 7 - Transparent Background/pixi.js b/examples/example 7 - Transparent Background/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 7 - Transparent Background/pixi.js +++ b/examples/example 7 - Transparent Background/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 8 - Dragging/pixi.js b/examples/example 8 - Dragging/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 8 - Dragging/pixi.js +++ b/examples/example 8 - Dragging/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 6 - Interactivity/pixi.js +++ b/examples/example 6 - Interactivity/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 7 - Transparent Background/pixi.js b/examples/example 7 - Transparent Background/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 7 - Transparent Background/pixi.js +++ b/examples/example 7 - Transparent Background/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 8 - Dragging/pixi.js b/examples/example 8 - Dragging/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 8 - Dragging/pixi.js +++ b/examples/example 8 - Dragging/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 9 - Tiling Texture/pixi.js b/examples/example 9 - Tiling Texture/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 9 - Tiling Texture/pixi.js +++ b/examples/example 9 - Tiling Texture/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 6 - Interactivity/pixi.js +++ b/examples/example 6 - Interactivity/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 7 - Transparent Background/pixi.js b/examples/example 7 - Transparent Background/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 7 - Transparent Background/pixi.js +++ b/examples/example 7 - Transparent Background/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 8 - Dragging/pixi.js b/examples/example 8 - Dragging/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 8 - Dragging/pixi.js +++ b/examples/example 8 - Dragging/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 9 - Tiling Texture/pixi.js b/examples/example 9 - Tiling Texture/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 9 - Tiling Texture/pixi.js +++ b/examples/example 9 - Tiling Texture/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/src/pixi/Text.js b/src/pixi/Text.js new file mode 100644 index 0000000..beadfc9 --- /dev/null +++ b/src/pixi/Text.js @@ -0,0 +1,148 @@ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 6 - Interactivity/pixi.js +++ b/examples/example 6 - Interactivity/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 7 - Transparent Background/pixi.js b/examples/example 7 - Transparent Background/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 7 - Transparent Background/pixi.js +++ b/examples/example 7 - Transparent Background/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 8 - Dragging/pixi.js b/examples/example 8 - Dragging/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 8 - Dragging/pixi.js +++ b/examples/example 8 - Dragging/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 9 - Tiling Texture/pixi.js b/examples/example 9 - Tiling Texture/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 9 - Tiling Texture/pixi.js +++ b/examples/example 9 - Tiling Texture/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/src/pixi/Text.js b/src/pixi/Text.js new file mode 100644 index 0000000..beadfc9 --- /dev/null +++ b/src/pixi/Text.js @@ -0,0 +1,148 @@ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; diff --git a/src/pixi/renderers/CanvasRenderer.js b/src/pixi/renderers/CanvasRenderer.js index fd36d1c..e07b399 100644 --- a/src/pixi/renderers/CanvasRenderer.js +++ b/src/pixi/renderers/CanvasRenderer.js @@ -77,6 +77,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -257,6 +258,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 6 - Interactivity/pixi.js +++ b/examples/example 6 - Interactivity/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 7 - Transparent Background/pixi.js b/examples/example 7 - Transparent Background/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 7 - Transparent Background/pixi.js +++ b/examples/example 7 - Transparent Background/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 8 - Dragging/pixi.js b/examples/example 8 - Dragging/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 8 - Dragging/pixi.js +++ b/examples/example 8 - Dragging/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 9 - Tiling Texture/pixi.js b/examples/example 9 - Tiling Texture/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 9 - Tiling Texture/pixi.js +++ b/examples/example 9 - Tiling Texture/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/src/pixi/Text.js b/src/pixi/Text.js new file mode 100644 index 0000000..beadfc9 --- /dev/null +++ b/src/pixi/Text.js @@ -0,0 +1,148 @@ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; diff --git a/src/pixi/renderers/CanvasRenderer.js b/src/pixi/renderers/CanvasRenderer.js index fd36d1c..e07b399 100644 --- a/src/pixi/renderers/CanvasRenderer.js +++ b/src/pixi/renderers/CanvasRenderer.js @@ -77,6 +77,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -257,6 +258,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/src/pixi/renderers/WebGLRenderer.js b/src/pixi/renderers/WebGLRenderer.js index f10d563..2089718 100644 --- a/src/pixi/renderers/WebGLRenderer.js +++ b/src/pixi/renderers/WebGLRenderer.js @@ -20,6 +20,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -69,6 +71,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -185,12 +212,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -295,12 +323,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -441,7 +480,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -465,7 +504,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -524,7 +563,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -549,7 +587,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -561,8 +599,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -570,7 +608,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 6 - Interactivity/pixi.js +++ b/examples/example 6 - Interactivity/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 7 - Transparent Background/pixi.js b/examples/example 7 - Transparent Background/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 7 - Transparent Background/pixi.js +++ b/examples/example 7 - Transparent Background/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 8 - Dragging/pixi.js b/examples/example 8 - Dragging/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 8 - Dragging/pixi.js +++ b/examples/example 8 - Dragging/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 9 - Tiling Texture/pixi.js b/examples/example 9 - Tiling Texture/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 9 - Tiling Texture/pixi.js +++ b/examples/example 9 - Tiling Texture/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/src/pixi/Text.js b/src/pixi/Text.js new file mode 100644 index 0000000..beadfc9 --- /dev/null +++ b/src/pixi/Text.js @@ -0,0 +1,148 @@ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; diff --git a/src/pixi/renderers/CanvasRenderer.js b/src/pixi/renderers/CanvasRenderer.js index fd36d1c..e07b399 100644 --- a/src/pixi/renderers/CanvasRenderer.js +++ b/src/pixi/renderers/CanvasRenderer.js @@ -77,6 +77,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -257,6 +258,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/src/pixi/renderers/WebGLRenderer.js b/src/pixi/renderers/WebGLRenderer.js index f10d563..2089718 100644 --- a/src/pixi/renderers/WebGLRenderer.js +++ b/src/pixi/renderers/WebGLRenderer.js @@ -20,6 +20,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -69,6 +71,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -185,12 +212,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -295,12 +323,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -441,7 +480,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -465,7 +504,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -524,7 +563,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -549,7 +587,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -561,8 +599,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -570,7 +608,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/src/pixi/textures/BaseTexture.js b/src/pixi/textures/BaseTexture.js index 58630d7..763c49f 100644 --- a/src/pixi/textures/BaseTexture.js +++ b/src/pixi/textures/BaseTexture.js @@ -4,6 +4,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -86,6 +87,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url diff --git a/Gruntfile.js b/Gruntfile.js index ef21a5e..22514d1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,6 +16,7 @@ '<%= dirs.src %>/DisplayObjectContainer.js', '<%= dirs.src %>/Sprite.js', '<%= dirs.src %>/MovieClip.js', + '<%= dirs.src %>/Text.js', '<%= dirs.src %>/InteractionManager.js', '<%= dirs.src %>/Stage.js', '<%= dirs.src %>/utils/Utils.js', @@ -99,7 +100,8 @@ 'examples/example 6 - Interactivity', 'examples/example 7 - Transparent Background', 'examples/example 8 - Dragging', - 'examples/example 9 - Tiling Texture' + 'examples/example 9 - Tiling Texture', + 'examples/example 10 - Text' ] }, connect: { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 78094b3..7e34e08 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/bin/pixi.js b/bin/pixi.js index 7474610..70ad5ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -4,10 +4,10 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*a,i[1]=c*s+u*o,i[2]=c*n+u*h+d,i[3]=l*r+I*a,i[4]=l*s+I*o,i[5]=l*n+I*h+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],a=r[2],o=r[3],h=r[4],c=r[5],u=1/(s*h+n*-o),d=h*u*i.x+-n*u*i.y+(c*n-a*h)*u,l=s*u*i.y+-o*u*i.x+(-c*s+a*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var _=t.children[P],b=this.hitTest(_,e);if(b)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var a=this.interactiveItems.length,r=0;a>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var a=this.interactiveItems.length,o=0;a>o;o++){var h=this.interactiveItems[o];if((h.touchstart||h.tap)&&(h.__hit=this.hitTest(h,n),h.__hit&&(h.touchstart&&h.touchstart(n),h.__isDown=!0,h.__touchData=n,!h.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],a=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,h=0;o>h;h++){var c=this.interactiveItems[h],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!a?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(a=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],a=e[3],o=e[4],h=e[5],c=1/(r*o+s*-a);return new PIXI.Point(o*c*i.x+-s*c*i.y+(h*s-n*o)*c,r*c*i.y+-a*c*i.x+(-h*r+n*a)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],_=e[8];return i[0]=l*r+I*a+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*h+f*d,i[3]=p*r+v*a+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*h+x*d,i[6]=g*r+P*a+_*c,i[7]=g*s+P*o+_*u,i[8]=g*n+P*h+_*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],a=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=a,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],a=t[3],o=t[4],h=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],_=e[1],b=e[2],m=e[3];return i[0]=P*r+_*o+b*d+m*p,i[1]=P*s+_*h+b*l+m*v,i[2]=P*n+_*c+b*I+m*x,i[3]=P*a+_*u+b*f+m*g,P=e[4],_=e[5],b=e[6],m=e[7],i[4]=P*r+_*o+b*d+m*p,i[5]=P*s+_*h+b*l+m*v,i[6]=P*n+_*c+b*I+m*x,i[7]=P*a+_*u+b*f+m*g,P=e[8],_=e[9],b=e[10],m=e[11],i[8]=P*r+_*o+b*d+m*p,i[9]=P*s+_*h+b*l+m*v,i[10]=P*n+_*c+b*I+m*x,i[11]=P*a+_*u+b*f+m*g,P=e[12],_=e[13],b=e[14],m=e[15],i[12]=P*r+_*o+b*d+m*p,i[13]=P*s+_*h+b*l+m*v,i[14]=P*n+_*c+b*I+m*x,i[15]=P*a+_*u+b*f+m*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var a=this.gl;this.batch=new PIXI.WebGLBatch(a),a.disable(a.DEPTH_TEST),a.enable(a.BLEND),a.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),a=PIXI._getBatch(this.gl),o=this.batchs.indexOf(r);return a.init(t),this.batchs.splice(o+1,0,a,n),void 0}}}else s=i;var a=PIXI._getBatch(this.gl);if(a.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,a)}else this.batchs.push(a)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e),PIXI._returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&PIXI._returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,a=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*a+s,t.uvs[3]=0-n,t.uvs[4]=1*a+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0;PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize); -for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,a=i[n],o=i[n+2],h=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(a,c),e.lineTo(o,u),e.lineTo(h,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y)},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var a=2*n,o=i[a],h=i[a+2],c=i[a+4],u=i[a+1],d=i[a+3],l=i[a+5],I=r[a]*t.texture.width,f=r[a+2]*t.texture.width,p=r[a+4]*t.texture.width,v=r[a+1]*t.texture.height,x=r[a+3]*t.texture.height,g=r[a+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(h,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,_=o*x+v*c+h*g-x*c-v*h-o*g,b=I*h+o*p+f*c-h*p-o*f-I*c,m=I*x*c+v*h*p+o*f*g-o*x*p-v*f*c-I*h*g,X=u*x+v*l+d*g-x*l-v*d-u*g,T=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(_/P,X/P,b/P,T/P,m/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o,c=o/(a-1);o%2?(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1):(e[h]=c,e[h+1]=0,e[h+2]=c,e[h+3]=1),h=2*o,r[h]=1,r[h+1]=1,h=2*o,i[h]=h,i[h+1]=h+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var a=t.length,o=1;a>o;o++){var n=t[o],h=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(a-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[h]=n.x+s.x,i[h+1]=n.y+s.y,i[h+2]=n.x-s.x,i[h+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,a=0;t.length>a;a++)if(s==t[a]){n="img";break}if("img"!=n)for(var a=0;e.length>a;a++)if(s==e[a]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var h=this;o.baseTexture.addEventListener("loaded",function(){h.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var h=this;c.addEventListener("loaded",function(){h.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file +function HEXtoRGB(t){return[(255&t>>16)/255,(255&t>>8)/255,(255&t)/255]}function determineMatrixArrayType(){return PIXI.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,PIXI.Matrix}var PIXI=PIXI||{};PIXI.Point=function(t,e){this.x=t||0,this.y=e||0},PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)},PIXI.Point.constructor=PIXI.Point,PIXI.Rectangle=function(t,e,i,r){this.x=t||0,this.y=e||0,this.width=i||0,this.height=r||0},PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Rectangle.constructor=PIXI.Rectangle,PIXI.DisplayObject=function(){this.position=new PIXI.Point,this.scale=new PIXI.Point(1,1),this.rotation=0,this.alpha=1,this.visible=!0,this.cacheVisible=!1,this.parent=null,this.stage=null,this.hitArea=null,this.worldAlpha=1,this.color=[],this.worldTransform=PIXI.mat3.create(),this.localTransform=PIXI.mat3.create(),this.dynamic=!0,this._sr=0,this._cr=1,this.renderable=!1,this.interactive=!1,this.buttonMode=!1},PIXI.DisplayObject.constructor=PIXI.DisplayObject,PIXI.DisplayObject.prototype.setInteractive=function(t){this.interactive=t,this.stage&&(this.stage.dirty=!0)},PIXI.DisplayObject.prototype.updateTransform=function(){this.rotation!=this.rotationCache&&(this.rotationCache=this.rotation,this._sr=Math.sin(this.rotation),this._cr=Math.cos(this.rotation));var t=this.localTransform,e=this.parent.worldTransform,i=this.worldTransform;t[0]=this._cr*this.scale.x,t[1]=-this._sr*this.scale.y,t[3]=this._sr*this.scale.x,t[4]=this._cr*this.scale.y,t[2]=this.position.x,t[5]=this.position.y;var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=e[0],u=e[1],d=e[2],l=e[3],I=e[4],f=e[5];i[0]=c*r+u*h,i[1]=c*s+u*o,i[2]=c*n+u*a+d,i[3]=l*r+I*h,i[4]=l*s+I*o,i[5]=l*n+I*a+f,this.worldAlpha=this.alpha*this.parent.worldAlpha},PIXI.DisplayObjectContainer=function(){PIXI.DisplayObject.call(this),this.children=[],this.renderable=!1},PIXI.DisplayObjectContainer.constructor=PIXI.DisplayObjectContainer,PIXI.DisplayObjectContainer.prototype=Object.create(PIXI.DisplayObject.prototype),PIXI.DisplayObjectContainer.prototype.addChild=function(t){void 0!=t.parent&&t.parent.removeChild(t),t.parent=this,t.childIndex=this.children.length,this.children.push(t),this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.addChildAt=function(t,e){if(!(e>=0&&this.children.length>=e))throw Error(t+" The index "+e+" supplied is out of bounds "+this.children.length);void 0!=t.parent&&t.parent.removeChild(t),e==this.children.length?this.children.push(t):this.children.splice(e,0,t),t.parent=this,t.childIndex=e;for(var i=this.children.length,r=e;i>r;r++)this.children[r].childIndex=r;this.stage&&this.stage.__addChild(t)},PIXI.DisplayObjectContainer.prototype.swapChildren=function(t,e){var i=this.children.indexOf(t),r=this.children.indexOf(e);if(-1===i||-1===r)throw Error(t+" Both the supplied DisplayObjects must be a child of the caller "+this);this.stage&&(this.stage.__removeChild(t),this.stage.__removeChild(e),this.stage.__addChild(t),this.stage.__addChild(e)),t.childIndex=r,e.childIndex=i,this.children[i]=e,this.children[r]=t},PIXI.DisplayObjectContainer.prototype.getChildAt=function(t){if(t>=0&&this.children.length>t)return this.children[t];throw Error(child+" Both the supplied DisplayObjects must be a child of the caller "+this)},PIXI.DisplayObjectContainer.prototype.removeChild=function(t){var e=this.children.indexOf(t);if(-1===e)throw Error(t+" The supplied DisplayObject must be a child of the caller "+this);this.stage&&this.stage.__removeChild(t),t.parent=void 0,this.children.splice(e,1);for(var i=e,r=this.children.length;r>i;i++)this.children[i].childIndex-=1},PIXI.DisplayObjectContainer.prototype.updateTransform=function(){if(this.visible){PIXI.DisplayObject.prototype.updateTransform.call(this);for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform()}},PIXI.blendModes={},PIXI.blendModes.NORMAL=0,PIXI.blendModes.SCREEN=1,PIXI.Sprite=function(t){PIXI.DisplayObjectContainer.call(this),this.anchor=new PIXI.Point,this.texture=t,this.blendMode=PIXI.blendModes.NORMAL,this._width=0,this._height=0,t.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Sprite.constructor=PIXI.Sprite,PIXI.Sprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),Object.defineProperty(PIXI.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(t){this.scale.x=t/this.texture.frame.width,this._width=t}}),Object.defineProperty(PIXI.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(t){this.scale.y=t/this.texture.frame.height,this._height=t}}),PIXI.Sprite.prototype.setTexture=function(t){this.texture.baseTexture!=t.baseTexture&&(this.textureChange=!0),this.texture=t,this.updateFrame=!0},PIXI.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},PIXI.Sprite.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache"+this);return new PIXI.Sprite(e)},PIXI.Sprite.fromImage=function(t){var e=PIXI.Texture.fromImage(t);return new PIXI.Sprite(e)},PIXI.MovieClip=function(t){PIXI.Sprite.call(this,t[0]),this.textures=t,this.currentFrame=0,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.playing},PIXI.MovieClip.constructor=PIXI.MovieClip,PIXI.MovieClip.prototype=Object.create(PIXI.Sprite.prototype),PIXI.MovieClip.prototype.stop=function(){this.playing=!1},PIXI.MovieClip.prototype.play=function(){this.playing=!0},PIXI.MovieClip.prototype.gotoAndStop=function(t){this.playing=!1,this.currentFrame=t;var e=0|this.currentFrame+.5;this.setTexture(this.textures[e%this.textures.length])},PIXI.MovieClip.prototype.gotoAndPlay=function(t){this.currentFrame=t,this.playing=!0},PIXI.MovieClip.prototype.updateTransform=function(){if(PIXI.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var t=0|this.currentFrame+.5;this.loop||this.textures.length>t?this.setTexture(this.textures[t%this.textures.length]):t>=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},PIXI.Text=function(t,e,i,r,s){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.setText(t),this.setStyle(e,i,r,s),this.updateText(),PIXI.Sprite.call(this,PIXI.Texture.fromCanvas(this.canvas))},PIXI.Text.constructor=PIXI.Text,PIXI.Text.prototype=Object.create(PIXI.Sprite.prototype),PIXI.Text.prototype.setText=function(t){this.text=t||" ",this.dirty=!0},PIXI.Text.prototype.setStyle=function(t,e,i,r){this.fontStyle=t||"bold 20pt Arial",this.fillStyle=e,this.strokeStyle=i,this.strokeThickness=r||0,this.dirty=!0},PIXI.Text.prototype.updateText=function(){this.context.font=this.fontStyle,this.canvas.width=this.context.measureText(this.text).width+this.strokeThickness,this.canvas.height=this.determineFontHeight("font: "+this.fontStyle+";")+this.strokeThickness,this.context.fillStyle=this.fillStyle,this.context.font=this.fontStyle,this.context.strokeStyle=this.strokeStyle,this.context.lineWidth=this.strokeThickness,this.context.textBaseline="top",this.fillStyle&&this.context.fillText(this.text,this.strokeThickness/2,this.strokeThickness/2),this.strokeStyle&&this.strokeThickness&&this.context.strokeText(this.text,this.strokeThickness/2,this.strokeThickness/2)},PIXI.Text.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.texture.baseTexture.width=this.canvas.width,this.texture.baseTexture.height=this.canvas.height,this.texture.frame.width=this.canvas.width,this.texture.frame.height=this.canvas.height,PIXI.texturesToUpdate.push(this.texture.baseTexture),this.dirty=!1),PIXI.Sprite.prototype.updateTransform.call(this)},PIXI.Text.prototype.determineFontHeight=function(t){var e=PIXI.Text.heightCache[t];if(!e){var i=document.getElementsByTagName("body")[0],r=document.createElement("div"),s=document.createTextNode("M");r.appendChild(s),r.setAttribute("style",t),i.appendChild(r),e=r.offsetHeight,PIXI.Text.heightCache[t]=e,i.removeChild(r)}return e},PIXI.Text.prototype.destroy=function(t){t&&this.texture.destroy()},PIXI.Text.heightCache={},PIXI.InteractionManager=function(t){this.stage=t,this.tempPoint=new PIXI.Point,this.mouseoverEnabled=!0,this.mouse=new PIXI.InteractionData,this.touchs={},this.pool=[],this.interactiveItems=[],this.last=0},PIXI.InteractionManager.constructor=PIXI.InteractionManager,PIXI.InteractionManager.prototype.collectInteractiveSprite=function(t,e){for(var i=t.children,r=i.length,s=r-1;s>=0;s--){var n=i[s];n.interactive?(e.interactiveChildren=!0,this.interactiveItems.push(n),n.children.length>0&&this.collectInteractiveSprite(n,n)):(n.__iParent=null,n.children.length>0&&this.collectInteractiveSprite(n,e))}},PIXI.InteractionManager.prototype.setTarget=function(t){window.navigator.msPointerEnabled&&(t.view.style["-ms-content-zooming"]="none",t.view.style["-ms-touch-action"]="none"),this.target=t,t.view.addEventListener("mousemove",this.onMouseMove.bind(this),!0),t.view.addEventListener("mousedown",this.onMouseDown.bind(this),!0),document.body.addEventListener("mouseup",this.onMouseUp.bind(this),!0),t.view.addEventListener("mouseout",this.onMouseUp.bind(this),!0),t.view.addEventListener("touchstart",this.onTouchStart.bind(this),!0),t.view.addEventListener("touchend",this.onTouchEnd.bind(this),!0),t.view.addEventListener("touchmove",this.onTouchMove.bind(this),!0)},PIXI.InteractionManager.prototype.update=function(){var t=Date.now(),e=t-this.last;if(e=30*e/1e3,!(1>e)){if(this.last=t,this.dirty){this.dirty=!1,this.interactiveItems.length;for(var i=0;this.interactiveItems.length>i;i++)this.interactiveItems[i].interactiveChildren=!0;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}for(var r=this.interactiveItems.length,i=0;r>i;i++){var s=this.interactiveItems[i];s.visible&&(s.mouseover||s.mouseout||s.buttonMode)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit?s.__isOver||(s.buttonMode&&(this.target.view.style.cursor="pointer"),s.mouseover&&s.mouseover(this.mouse),s.__isOver=!0):s.__isOver&&(s.buttonMode&&(this.target.view.style.cursor="default"),s.mouseout&&s.mouseout(this.mouse),s.__isOver=!1))}}},PIXI.InteractionManager.prototype.onMouseMove=function(t){t.preventDefault();var e=this.target.view.getBoundingClientRect();this.mouse.global.x=(t.clientX-e.left)*(this.target.width/e.width),this.mouse.global.y=(t.clientY-e.top)*(this.target.height/e.height);var i=this.interactiveItems.length;this.mouse.global;for(var r=0;i>r;r++){var s=this.interactiveItems[r];s.mousemove&&s.mousemove(this.mouse)}},PIXI.InteractionManager.prototype.onMouseDown=function(t){t.preventDefault();var e=this.interactiveItems.length;this.mouse.global,this.stage;for(var i=0;e>i;i++){var r=this.interactiveItems[i];if((r.mousedown||r.click)&&(r.__mouseIsDown=!0,r.__hit=this.hitTest(r,this.mouse),r.__hit&&(r.mousedown&&r.mousedown(this.mouse),r.__isDown=!0,!r.interactiveChildren)))break}},PIXI.InteractionManager.prototype.onMouseUp=function(t){t.preventDefault(),this.mouse.global;for(var e=this.interactiveItems.length,i=!1,r=0;e>r;r++){var s=this.interactiveItems[r];(s.mouseup||s.mouseupoutside||s.click)&&(s.__hit=this.hitTest(s,this.mouse),s.__hit&&!i?(s.mouseup&&s.mouseup(this.mouse),s.__isDown&&s.click&&s.click(this.mouse),s.interactiveChildren||(i=!0)):s.__isDown&&s.mouseupoutside&&s.mouseupoutside(this.mouse),s.__isDown=!1)}},PIXI.InteractionManager.prototype.hitTest=function(t,e){var i=e.global;if(!t.visible)return!1;if(t instanceof PIXI.Sprite){var r=t.worldTransform,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,I=t.texture.frame.width,f=t.texture.frame.height,p=-I*t.anchor.x;if(d>p&&p+I>d){var v=-f*t.anchor.y;if(l>v&&v+f>l)return!0}}else if(t.hitArea){var r=t.worldTransform,x=t.hitArea,s=r[0],n=r[1],h=r[2],o=r[3],a=r[4],c=r[5],u=1/(s*a+n*-o),d=a*u*i.x+-n*u*i.y+(c*n-h*a)*u,l=s*u*i.y+-o*u*i.x+(-c*s+h*o)*u,p=x.x;if(d>p&&p+x.width>d){var v=x.y;if(l>v&&v+x.height>l)return!0}}for(var g=t.children.length,P=0;g>P;P++){var b=t.children[P],T=this.hitTest(b,e);if(T)return!0}return!1},PIXI.InteractionManager.prototype.onTouchMove=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier];n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height)}for(var h=this.interactiveItems.length,r=0;h>r;r++){var o=this.interactiveItems[r];o.touchmove&&o.touchmove(n)}},PIXI.InteractionManager.prototype.onTouchStart=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.pool.pop();n||(n=new PIXI.InteractionData),this.touchs[s.identifier]=n,n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var h=this.interactiveItems.length,o=0;h>o;o++){var a=this.interactiveItems[o];if((a.touchstart||a.tap)&&(a.__hit=this.hitTest(a,n),a.__hit&&(a.touchstart&&a.touchstart(n),a.__isDown=!0,a.__touchData=n,!a.interactiveChildren)))break}}},PIXI.InteractionManager.prototype.onTouchEnd=function(t){t.preventDefault();for(var e=this.target.view.getBoundingClientRect(),i=t.changedTouches,r=0;i.length>r;r++){var s=i[r],n=this.touchs[s.identifier],h=!1;n.global.x=(s.clientX-e.left)*(this.target.width/e.width),n.global.y=(s.clientY-e.top)*(this.target.height/e.height);for(var o=this.interactiveItems.length,a=0;o>a;a++){var c=this.interactiveItems[a],u=c.__touchData;c.__hit=this.hitTest(c,n),u==n&&((c.touchend||c.tap)&&(c.__hit&&!h?(c.touchend&&c.touchend(n),c.__isDown&&c.tap&&c.tap(n),c.interactiveChildren||(h=!0)):c.__isDown&&c.touchendoutside&&c.touchendoutside(n),c.__isDown=!1),c.__touchData=null)}this.pool.push(n),this.touchs[s.identifier]=null}},PIXI.InteractionData=function(){this.global=new PIXI.Point,this.local=new PIXI.Point,this.target},PIXI.InteractionData.prototype.getLocalPosition=function(t){var e=t.worldTransform,i=this.global,r=e[0],s=e[1],n=e[2],h=e[3],o=e[4],a=e[5],c=1/(r*o+s*-h);return new PIXI.Point(o*c*i.x+-s*c*i.y+(a*s-n*o)*c,r*c*i.y+-h*c*i.x+(-a*r+n*h)*c)},PIXI.InteractionData.constructor=PIXI.InteractionData,PIXI.Stage=function(t,e){PIXI.DisplayObjectContainer.call(this),this.worldTransform=PIXI.mat3.create(),this.__childrenAdded=[],this.__childrenRemoved=[],this.childIndex=0,this.stage=this,this.stage.hitArea=new PIXI.Rectangle(0,0,1e5,1e5),this.interactive=!!e,this.interactionManager=new PIXI.InteractionManager(this),this.setBackgroundColor(t)},PIXI.Stage.constructor=PIXI.Stage,PIXI.Stage.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var t=0,e=this.children.length;e>t;t++)this.children[t].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},PIXI.Stage.prototype.setBackgroundColor=function(t){this.backgroundColor=t||0,this.backgroundColorSplit=HEXtoRGB(this.backgroundColor),this.backgroundColorString="#"+this.backgroundColor.toString(16)},PIXI.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},PIXI.Stage.prototype.__addChild=function(t){if(t.interactive&&(this.dirty=!0),t.stage=this,t.children)for(var e=0;t.children.length>e;e++)this.__addChild(t.children[e])},PIXI.Stage.prototype.__removeChild=function(t){if(t.interactive&&(this.dirty=!0),this.__childrenRemoved.push(t),t.stage=void 0,t.children)for(var e=0,i=t.children.length;i>e;e++)this.__removeChild(t.children[e])},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var t=Array.prototype.slice;return function(e){function i(){var n=s.concat(t.call(arguments));r.apply(this instanceof i?this:e,n)}var r=this,s=t.call(arguments,1);if("function"!=typeof r)throw new TypeError;return i.prototype=function n(t){return t&&(n.prototype=t),this instanceof n?void 0:new n}(r.prototype),i}}());var AjaxRequest=function(){var t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new XMLHttpRequest:!1;for(var e=0;t.length>e;e++)try{return new ActiveXObject(t[e])}catch(i){}};PIXI.EventTarget=function(){var t={};this.addEventListener=this.on=function(e,i){void 0===t[e]&&(t[e]=[]),-1===t[e].indexOf(i)&&t[e].push(i)},this.dispatchEvent=this.emit=function(e){for(var i in t[e.type])t[e.type][i](e)},this.removeEventListener=this.off=function(e,i){var r=t[e].indexOf(i);-1!==r&&t[e].splice(r,1)}},determineMatrixArrayType(),PIXI.mat3={},PIXI.mat3.create=function(){var t=new PIXI.Matrix(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},PIXI.mat4={},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat3.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=e[0],I=e[1],f=e[2],p=e[3],v=e[4],x=e[5],g=e[6],P=e[7],b=e[8];return i[0]=l*r+I*h+f*c,i[1]=l*s+I*o+f*u,i[2]=l*n+I*a+f*d,i[3]=p*r+v*h+x*c,i[4]=p*s+v*o+x*u,i[5]=p*n+v*a+x*d,i[6]=g*r+P*h+b*c,i[7]=g*s+P*o+b*u,i[8]=g*n+P*a+b*d,i},PIXI.mat3.toMat4=function(t,e){return e||(e=PIXI.mat4.create()),e[15]=1,e[14]=0,e[13]=0,e[12]=0,e[11]=0,e[10]=t[8],e[9]=t[7],e[8]=t[6],e[7]=0,e[6]=t[5],e[5]=t[4],e[4]=t[3],e[3]=0,e[2]=t[2],e[1]=t[1],e[0]=t[0],e},PIXI.mat4.create=function(){var t=new PIXI.Matrix(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},PIXI.mat4.transpose=function(t,e){if(!e||t===e){var i=t[1],r=t[2],s=t[3],n=t[6],h=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=i,t[6]=t[9],t[7]=t[13],t[8]=r,t[9]=n,t[11]=t[14],t[12]=s,t[13]=h,t[14]=o,t}return e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15],e},PIXI.mat4.multiply=function(t,e,i){i||(i=t);var r=t[0],s=t[1],n=t[2],h=t[3],o=t[4],a=t[5],c=t[6],u=t[7],d=t[8],l=t[9],I=t[10],f=t[11],p=t[12],v=t[13],x=t[14],g=t[15],P=e[0],b=e[1],T=e[2],_=e[3];return i[0]=P*r+b*o+T*d+_*p,i[1]=P*s+b*a+T*l+_*v,i[2]=P*n+b*c+T*I+_*x,i[3]=P*h+b*u+T*f+_*g,P=e[4],b=e[5],T=e[6],_=e[7],i[4]=P*r+b*o+T*d+_*p,i[5]=P*s+b*a+T*l+_*v,i[6]=P*n+b*c+T*I+_*x,i[7]=P*h+b*u+T*f+_*g,P=e[8],b=e[9],T=e[10],_=e[11],i[8]=P*r+b*o+T*d+_*p,i[9]=P*s+b*a+T*l+_*v,i[10]=P*n+b*c+T*I+_*x,i[11]=P*h+b*u+T*f+_*g,P=e[12],b=e[13],T=e[14],_=e[15],i[12]=P*r+b*o+T*d+_*p,i[13]=P*s+b*a+T*l+_*v,i[14]=P*n+b*c+T*I+_*x,i[15]=P*h+b*u+T*f+_*g,i},PIXI.autoDetectRenderer=function(t,e,i,r){t||(t=800),e||(e=600);var s=function(){try{return!!window.WebGLRenderingContext&&!!document.createElement("canvas").getContext("experimental-webgl")}catch(t){return!1}}();return s?new PIXI.WebGLRenderer(t,e,i,r):new PIXI.CanvasRenderer(t,e,i,r)},PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = 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 = uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],PIXI.CompileVertexShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.VERTEX_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI.CompileFragmentShader=function(t,e){for(var i="",r=0;e.length>r;r++)i+=e[r];var s;return s=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(s,i),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)},PIXI._defaultFrame=new PIXI.Rectangle(0,0,1,1),PIXI.WebGLRenderer=function(t,e,i,r){this.transparent=!!r,this.width=t||800,this.height=e||600,this.view=i||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var s=this;this.view.addEventListener("webglcontextlost",function(t){s.handleContextLost(t)},!1),this.view.addEventListener("webglcontextrestored",function(t){s.handleContextRestored(t)},!1),this.batchs=[];try{this.gl=this.view.getContext("experimental-webgl",{alpha:this.transparent,antialias:!1,premultipliedAlpha:!0})}catch(n){throw Error(" This browser does not support webGL. Try using the canvas renderer"+this)}this.initShaders();var h=this.gl;this.batch=new PIXI.WebGLBatch(h),h.disable(h.DEPTH_TEST),h.enable(h.BLEND),h.colorMask(!0,!0,!0,this.transparent),this.projectionMatrix=PIXI.mat4.create(),this.resize(this.width,this.height),this.contextLost=!1},PIXI.WebGLRenderer.constructor=PIXI.WebGLRenderer,PIXI.WebGLRenderer.prototype.getBatch=function(){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(this.gl):PIXI._batchs.pop()},PIXI.WebGLRenderer.prototype.returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI.WebGLRenderer.prototype.initShaders=function(){var t=this.gl,e=PIXI.CompileFragmentShader(t,PIXI.shaderFragmentSrc),i=PIXI.CompileVertexShader(t,PIXI.shaderVertexSrc);this.shaderProgram=t.createProgram();var r=this.shaderProgram;t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialise shaders"),t.useProgram(r),r.vertexPositionAttribute=t.getAttribLocation(r,"aVertexPosition"),t.enableVertexAttribArray(r.vertexPositionAttribute),r.textureCoordAttribute=t.getAttribLocation(r,"aTextureCoord"),t.enableVertexAttribArray(r.textureCoordAttribute),r.colorAttribute=t.getAttribLocation(r,"aColor"),t.enableVertexAttribArray(r.colorAttribute),r.mvMatrixUniform=t.getUniformLocation(r,"uMVMatrix"),r.samplerUniform=t.getUniformLocation(r,"uSampler"),PIXI.shaderProgram=this.shaderProgram},PIXI.WebGLRenderer.prototype.checkVisibility=function(t,e){for(var i=t.children,r=0;i.length>r;r++){var s=i[r],n=s.visible&&e;s.textureChange&&(s.textureChange=!1,n&&(this.removeDisplayObject(s),this.addDisplayObject(s))),s.cacheVisible!=n&&(s.cacheVisible=n,s.cacheVisible?this.addDisplayObject(s):this.removeDisplayObject(s)),s.children.length>0&&this.checkVisibility(s,n)}},PIXI.WebGLRenderer.prototype.render=function(t){if(!this.contextLost){this.__stage!==t&&(this.__stage&&this.checkVisibility(this.__stage,!1),this.__stage=t);for(var e=0;t.__childrenRemoved.length>e;e++)this.removeDisplayObject(t.__childrenRemoved[e]);for(var e=0;PIXI.texturesToUpdate.length>e;e++)this.updateTexture(PIXI.texturesToUpdate[e]);for(var e=0;PIXI.texturesToDestroy.length>e;e++)this.destroyTexture(PIXI.texturesToDestroy[e]);t.__childrenRemoved=[],t.__childrenAdded=[],PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],this.checkVisibility(t,!0),t.updateTransform();var i=this.gl;i.clear(i.COLOR_BUFFER_BIT),i.clearColor(t.backgroundColorSplit[0],t.backgroundColorSplit[1],t.backgroundColorSplit[2],0),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix);for(var r,e=0;this.batchs.length>e;e++)r=this.batchs[e],r instanceof PIXI.WebGLBatch?this.batchs[e].render():r instanceof PIXI.TilingSprite?r.visible&&this.renderTilingSprite(r):r instanceof PIXI.Strip&&r.visible&&this.renderStrip(r);if(t.interactive&&(t._interactiveEventsAdded||(t._interactiveEventsAdded=!0,t.interactionManager.setTarget(this))),PIXI.Texture.frameUpdates.length>0){for(var e=0;PIXI.Texture.frameUpdates.length>e;e++)PIXI.Texture.frameUpdates[e].updateFrame=!1;PIXI.Texture.frameUpdates=[]}}},PIXI.WebGLRenderer.prototype.updateTexture=function(t){var e=this.gl;t._glTexture||(t._glTexture=e.createTexture()),t.hasLoaded&&(e.bindTexture(e.TEXTURE_2D,t._glTexture),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t._powerOf2?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),e.bindTexture(e.TEXTURE_2D,null)),this.refreshBatchs=!0},PIXI.WebGLRenderer.prototype.destroyTexture=function(t){var e=this.gl;t._glTexture&&(t._glTexture=e.createTexture(),e.deleteTexture(e.TEXTURE_2D,t._glTexture))},PIXI.WebGLRenderer.prototype.addDisplayObject=function(t){if(t.stage&&!t.__inWebGL&&(t.batch=null,t.renderable)){t.__inWebGL=!0;var e=t;do{if(0==e.childIndex)e=e.parent;else for(e=e.parent.children[e.childIndex-1];0!=e.children.length;)e=e.children[e.children.length-1];if(e==t.stage)break}while(!e.renderable||!e.__inWebGL);var i=t;do{if(0==i.children.length){for(;i.childIndex==i.parent.children.length-1;)if(i=i.parent,i==t.stage){i=null;break}i&&(i=i.parent.children[i.childIndex+1])}else i=i.children[0];if(!i)break}while(!i.renderable||!i.__inWebGL);if(t instanceof PIXI.Sprite){var r,s;if(e instanceof PIXI.Sprite){if(r=e.batch,r&&r.texture==t.texture.baseTexture&&r.blendMode==t.blendMode)return r.insertAfter(t,e),void 0}else r=e;if(i)if(i instanceof PIXI.Sprite){if(s=i.batch){if(s.texture==t.texture.baseTexture&&s.blendMode==t.blendMode)return s.insertBefore(t,i),void 0;if(s==r){var n=r.split(i),h=this.getBatch(),o=this.batchs.indexOf(r);return h.init(t),this.batchs.splice(o+1,0,h,n),void 0}}}else s=i;var h=this.getBatch();if(h.init(t),r){var o=this.batchs.indexOf(r);this.batchs.splice(o+1,0,h)}else this.batchs.push(h)}else t instanceof PIXI.TilingSprite?(this.initTilingSprite(t),this.batchs.push(t)):t instanceof PIXI.Strip&&(this.initStrip(t),this.batchs.push(t));this.batchUpdate=!0}},PIXI.WebGLRenderer.prototype.removeDisplayObject=function(t){if(t.cacheVisible=!1,t.renderable){t.__inWebGL=!1;var e;if(t instanceof PIXI.Sprite){var i=t.batch;if(!i)return;i.remove(t),0==i.size&&(e=i)}else e=t;if(e){var r=this.batchs.indexOf(e);if(-1==r)return;if(0==r||r==this.batchs.length-1)return this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),void 0;if(this.batchs[r-1]instanceof PIXI.WebGLBatch&&this.batchs[r+1]instanceof PIXI.WebGLBatch&&this.batchs[r-1].texture==this.batchs[r+1].texture&&this.batchs[r-1].blendMode==this.batchs[r+1].blendMode)return this.batchs[r-1].merge(this.batchs[r+1]),e instanceof PIXI.WebGLBatch&&this.returnBatch(e),this.returnBatch(this.batchs[r+1]),this.batchs.splice(r,2),void 0;this.batchs.splice(r,1),e instanceof PIXI.WebGLBatch&&this.returnBatch(e)}}},PIXI.WebGLRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e,this.gl.viewport(0,0,this.width,this.height);var i=this.projectionMatrix;i[0]=2/this.width,i[5]=-2/this.height,i[12]=-1,i[13]=1},PIXI.WebGLRenderer.prototype.initTilingSprite=function(t){var e=this.gl;t.verticies=new Float32Array([0,0,t.width,0,t.width,t.height,0,t.height]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.colors=new Float32Array([1,1,1,1]),t.indices=new Uint16Array([0,1,3,2]),t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW),t.texture.baseTexture._glTexture?(e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),t.texture.baseTexture._powerOf2=!0):t.texture.baseTexture._powerOf2=!0},PIXI.WebGLRenderer.prototype.renderTilingSprite=function(t){var e=this.gl;this.shaderProgram;var i=t.tilePosition,r=t.tileScale,s=i.x/t.texture.baseTexture.width,n=i.y/t.texture.baseTexture.height,h=t.width/t.texture.baseTexture.width/r.x,o=t.height/t.texture.baseTexture.height/r.y;t.uvs[0]=0+s,t.uvs[1]=0-n,t.uvs[2]=1*h+s,t.uvs[3]=0-n,t.uvs[4]=1*h+s,t.uvs[5]=1*o-n,t.uvs[6]=0+s,t.uvs[7]=1*o-n,e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.uvs),this.renderStrip(t)},PIXI.WebGLRenderer.prototype.initStrip=function(t){var e=this.gl;this.shaderProgram,t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},PIXI.WebGLRenderer.prototype.renderStrip=function(t){var e=this.gl,i=this.shaderProgram,r=PIXI.mat3.toMat4(t.worldTransform);PIXI.mat4.transpose(r),PIXI.mat4.multiply(this.projectionMatrix,r,r),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,r),t.blendMode==PIXI.blendModes.NORMAL?e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA):e.blendFunc(e.ONE,e.ONE_MINUS_SRC_COLOR),t.dirty?(t.dirty=!1,e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.verticies,e.STATIC_DRAW),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)):(e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferSubData(e.ARRAY_BUFFER,0,t.verticies),e.vertexAttribPointer(i.vertexPositionAttribute,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.vertexAttribPointer(i.textureCoordAttribute,2,e.FLOAT,!1,0,0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,t.texture.baseTexture._glTexture),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.vertexAttribPointer(i.colorAttribute,1,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer)),e.drawElements(e.TRIANGLE_STRIP,t.indices.length,e.UNSIGNED_SHORT,0),e.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,!1,this.projectionMatrix)},PIXI.WebGLRenderer.prototype.handleContextLost=function(t){t.preventDefault(),this.contextLost=!0},PIXI.WebGLRenderer.prototype.handleContextRestored=function(){this.gl=this.view.getContext("experimental-webgl",{alpha:!0}),this.initShaders();for(var t=0;PIXI.TextureCache.length>t;t++)this.updateTexture(PIXI.TextureCache[t]);for(var t=0;this.batchs.length>t;t++)this.batchs[t].restoreLostContext(this.gl),this.batchs[t].dirty=!0; +PIXI._restoreBatchs(this.gl),this.contextLost=!1},PIXI._batchs=[],PIXI._getBatch=function(t){return 0==PIXI._batchs.length?new PIXI.WebGLBatch(t):PIXI._batchs.pop()},PIXI._returnBatch=function(t){t.clean(),PIXI._batchs.push(t)},PIXI._restoreBatchs=function(t){for(var e=0;PIXI._batchs.length>e;e++)PIXI._batchs[e].restoreLostContext(t)},PIXI.WebGLBatch=function(t){this.gl=t,this.size=0,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer(),this.blendMode=PIXI.blendModes.NORMAL,this.dynamicSize=1},PIXI.WebGLBatch.constructor=PIXI.WebGLBatch,PIXI.WebGLBatch.prototype.clean=function(){this.verticies=[],this.uvs=[],this.indices=[],this.colors=[],this.dynamicSize=1,this.texture=null,this.last=null,this.size=0,this.head,this.tail},PIXI.WebGLBatch.prototype.restoreLostContext=function(t){this.gl=t,this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.uvBuffer=t.createBuffer(),this.colorBuffer=t.createBuffer()},PIXI.WebGLBatch.prototype.init=function(t){t.batch=this,this.dirty=!0,this.blendMode=t.blendMode,this.texture=t.texture.baseTexture,this.head=t,this.tail=t,this.size=1,this.growBatch()},PIXI.WebGLBatch.prototype.insertBefore=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__prev;e.__prev=t,t.__next=e,i?(t.__prev=i,i.__next=t):this.head=t},PIXI.WebGLBatch.prototype.insertAfter=function(t,e){this.size++,t.batch=this,this.dirty=!0;var i=e.__next;e.__next=t,t.__prev=e,i?(t.__next=i,i.__prev=t):this.tail=t},PIXI.WebGLBatch.prototype.remove=function(t){return this.size--,0==this.size?(t.batch=null,t.__prev=null,t.__next=null,void 0):(t.__prev?t.__prev.__next=t.__next:(this.head=t.__next,this.head.__prev=null),t.__next?t.__next.__prev=t.__prev:(this.tail=t.__prev,this.tail.__next=null),t.batch=null,t.__next=null,t.__prev=null,this.dirty=!0,void 0)},PIXI.WebGLBatch.prototype.split=function(t){this.dirty=!0;var e=new PIXI.WebGLBatch(this.gl);e.init(t),e.tail=this.tail,this.tail=t.__prev,this.tail.__next=null,t.__prev=null;for(var i=0;t;)i++,t.batch=e,t=t.__next;return e.size=i,this.size-=i,e},PIXI.WebGLBatch.prototype.merge=function(t){this.dirty=!0,this.tail.__next=t.head,t.head.__prev=this.tail,this.size+=t.size,this.tail=t.tail;for(var e=t.head;e;)e.batch=this,e=e.__next},PIXI.WebGLBatch.prototype.growBatch=function(){var t=this.gl;this.dynamicSize=1==this.size?1:1.5*this.size,this.verticies=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,this.verticies,t.DYNAMIC_DRAW),this.uvs=new Float32Array(8*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.uvBuffer),t.bufferData(t.ARRAY_BUFFER,this.uvs,t.DYNAMIC_DRAW),this.dirtyUVS=!0,this.colors=new Float32Array(4*this.dynamicSize),t.bindBuffer(t.ARRAY_BUFFER,this.colorBuffer),t.bufferData(t.ARRAY_BUFFER,this.colors,t.DYNAMIC_DRAW),this.dirtyColors=!0,this.indices=new Uint16Array(6*this.dynamicSize);for(var e=this.indices.length/6,i=0;e>i;i++){var r=6*i,s=4*i;this.indices[r+0]=s+0,this.indices[r+1]=s+1,this.indices[r+2]=s+2,this.indices[r+3]=s+0,this.indices[r+4]=s+2,this.indices[r+5]=s+3}t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW)},PIXI.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSize0&&(PIXI.Texture.frameUpdates=[])},PIXI.CanvasRenderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.view.width=t,this.view.height=e},PIXI.CanvasRenderer.prototype.renderDisplayObject=function(t){var e=t.worldTransform,i=this.context;i.globalCompositeOperation="source-over";var r=!1;if(t.visible){if(t instanceof PIXI.Sprite){var s=t.texture.frame;s&&(i.globalAlpha=t.worldAlpha,r=!1,i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),i.drawImage(t.texture.baseTexture.source,s.x,s.y,s.width,s.height,(t.anchor.x-t.texture.trim.x)*-s.width,(t.anchor.y-t.texture.trim.y)*-s.height,s.width,s.height))}else t instanceof PIXI.Strip?(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderStrip(t)):t instanceof PIXI.TilingSprite&&(i.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),this.renderTilingSprite(t));for(var n=0;t.children.length>n;n++)this.renderDisplayObject(t.children[n])}},PIXI.CanvasRenderer.prototype.renderStripFlat=function(t){var e=this.context,i=t.verticies;t.uvs;var r=i.length/2;this.count++,e.beginPath();for(var s=1;r-2>s;s++){var n=2*s,h=i[n],o=i[n+2],a=i[n+4],c=i[n+1],u=i[n+3],d=i[n+5];e.moveTo(h,c),e.lineTo(o,u),e.lineTo(a,d)}e.fillStyle="#FF0000",e.fill(),e.closePath()},PIXI.CanvasRenderer.prototype.renderTilingSprite=function(t){var e=this.context;t.__tilePattern||(t.__tilePattern=e.createPattern(t.texture.baseTexture.source,"repeat")),e.beginPath();var i=t.tilePosition,r=t.tileScale;e.scale(r.x,r.y),e.translate(i.x,i.y),e.fillStyle=t.__tilePattern,e.fillRect(-i.x,-i.y,t.width/r.x,t.height/r.y),e.scale(1/r.x,1/r.y),e.translate(-i.x,-i.y),e.closePath()},PIXI.CanvasRenderer.prototype.renderStrip=function(t){var e=this.context,i=t.verticies,r=t.uvs,s=i.length/2;this.count++;for(var n=1;s-2>n;n++){var h=2*n,o=i[h],a=i[h+2],c=i[h+4],u=i[h+1],d=i[h+3],l=i[h+5],I=r[h]*t.texture.width,f=r[h+2]*t.texture.width,p=r[h+4]*t.texture.width,v=r[h+1]*t.texture.height,x=r[h+3]*t.texture.height,g=r[h+5]*t.texture.height;e.save(),e.beginPath(),e.moveTo(o,u),e.lineTo(a,d),e.lineTo(c,l),e.closePath(),e.clip();var P=I*x+v*p+f*g-x*p-v*f-I*g,b=o*x+v*c+a*g-x*c-v*a-o*g,T=I*a+o*p+f*c-a*p-o*f-I*c,_=I*x*c+v*a*p+o*f*g-o*x*p-v*f*c-I*a*g,m=u*x+v*l+d*g-x*l-v*d-u*g,X=I*d+u*p+f*l-d*p-u*f-I*l,y=I*x*l+v*d*p+u*f*g-u*x*p-v*f*l-I*d*g;e.transform(b/P,m/P,T/P,X/P,_/P,y/P),e.drawImage(t.texture.baseTexture.source,0,0),e.restore()}},PIXI.Strip=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.blendMode=PIXI.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(r){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=e,this.height=i,t.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},PIXI.Strip.constructor=PIXI.Strip,PIXI.Strip.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.Strip.prototype.setTexture=function(t){this.texture=t,this.width=t.frame.width,this.height=t.frame.height,this.updateFrame=!0},PIXI.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.Rope=function(t,e){PIXI.Strip.call(this,t),this.points=e;try{this.verticies=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length)}catch(i){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},PIXI.Rope.constructor=PIXI.Rope,PIXI.Rope.prototype=Object.create(PIXI.Strip.prototype),PIXI.Rope.prototype.refresh=function(){var t=this.points;if(!(1>t.length)){var e=this.uvs,i=this.indices,r=this.colors,s=t[0],n=t[0];this.count-=.2,e[0]=0,e[1]=1,e[2]=0,e[3]=1,r[0]=1,r[1]=1,i[0]=0,i[1]=1;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o,c=o/(h-1);o%2?(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1):(e[a]=c,e[a+1]=0,e[a+2]=c,e[a+3]=1),a=2*o,r[a]=1,r[a+1]=1,a=2*o,i[a]=a,i[a+1]=a+1,s=n}}},PIXI.Rope.prototype.updateTransform=function(){var t=this.points;if(!(1>t.length)){var e,i=this.verticies,r=t[0],s={x:0,y:0},n=t[0];this.count-=.2,i[0]=n.x+s.x,i[1]=n.y+s.y,i[2]=n.x-s.x,i[3]=n.y-s.y;for(var h=t.length,o=1;h>o;o++){var n=t[o],a=4*o;e=t.length-1>o?t[o+1]:n,s.y=-(e.x-r.x),s.x=e.y-r.y;var c=10*(1-o/(h-1));c>1&&(c=1);var u=Math.sqrt(s.x*s.x+s.y*s.y),d=this.texture.height/2;s.x/=u,s.y/=u,s.x*=d,s.y*=d,i[a]=n.x+s.x,i[a+1]=n.y+s.y,i[a+2]=n.x-s.x,i[a+3]=n.y-s.y,r=n}PIXI.DisplayObjectContainer.prototype.updateTransform.call(this)}},PIXI.Rope.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite=function(t,e,i){PIXI.DisplayObjectContainer.call(this),this.texture=t,this.width=e,this.height=i,this.renderable=!0,this.tileScale=new PIXI.Point(2,1),this.tilePosition=new PIXI.Point(0,0),this.blendMode=PIXI.blendModes.NORMAL},PIXI.TilingSprite.constructor=PIXI.TilingSprite,PIXI.TilingSprite.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),PIXI.TilingSprite.prototype.setTexture=function(t){this.texture=t,this.updateFrame=!0},PIXI.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},PIXI.BaseTextureCache={},PIXI.texturesToUpdate=[],PIXI.texturesToDestroy=[],PIXI.BaseTexture=function(t){if(PIXI.EventTarget.call(this),this.width=100,this.height=100,this.source=t,this.source instanceof Image)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);else{var e=this;this.source.onload=function(){e.hasLoaded=!0,e.width=e.source.width,e.height=e.source.height,PIXI.texturesToUpdate.push(e),e.dispatchEvent({type:"loaded",content:e})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,PIXI.texturesToUpdate.push(this);this._powerOf2=!1},PIXI.BaseTexture.constructor=PIXI.BaseTexture,PIXI.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,PIXI.texturesToDestroy.push(this)},PIXI.BaseTexture.fromImage=function(t,e){var i=PIXI.BaseTextureCache[t];if(!i){var r=new Image;e&&(r.crossOrigin=""),r.src=t,i=new PIXI.BaseTexture(r),PIXI.BaseTextureCache[t]=i}return i},PIXI.TextureCache={},PIXI.FrameCache={},PIXI.Texture=function(t,e){if(PIXI.EventTarget.call(this),e||(this.noFrame=!0,e=new PIXI.Rectangle(0,0,1,1)),this.trim=new PIXI.Point,t instanceof PIXI.Texture&&(t=t.baseTexture),this.baseTexture=t,this.frame=e,this.scope=this,t.hasLoaded)this.noFrame&&(e=new PIXI.Rectangle(0,0,t.width,t.height)),this.setFrame(e);else{var i=this;t.addEventListener("loaded",function(){i.onBaseTextureLoaded()})}},PIXI.Texture.constructor=PIXI.Texture,PIXI.Texture.prototype.onBaseTextureLoaded=function(){var t=this.baseTexture;t.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new PIXI.Rectangle(0,0,t.width,t.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},PIXI.Texture.prototype.destroy=function(t){t&&this.baseTexture.destroy()},PIXI.Texture.prototype.setFrame=function(t){if(this.frame=t,this.width=t.width,this.height=t.height,t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height)throw Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,PIXI.Texture.frameUpdates.push(this)},PIXI.Texture.fromImage=function(t,e){var i=PIXI.TextureCache[t];return i||(i=new PIXI.Texture(PIXI.BaseTexture.fromImage(t,e)),PIXI.TextureCache[t]=i),i},PIXI.Texture.fromFrame=function(t){var e=PIXI.TextureCache[t];if(!e)throw Error("The frameId '"+t+"' does not exist in the texture cache "+this);return e},PIXI.Texture.fromCanvas=function(t){var e=new PIXI.BaseTexture(t);return new PIXI.Texture(e)},PIXI.Texture.addTextureToCache=function(t,e){PIXI.TextureCache[e]=t},PIXI.Texture.removeTextureFromCache=function(t){var e=PIXI.TextureCache[t];return PIXI.TextureCache[t]=null,e},PIXI.Texture.frameUpdates=[],PIXI.SpriteSheetLoader=function(t){PIXI.EventTarget.call(this),this.url=t,this.baseUrl=t.replace(/[^\/]*$/,""),this.texture,this.frames={},this.crossorigin=!1},PIXI.SpriteSheetLoader.constructor=PIXI.SpriteSheetLoader,PIXI.SpriteSheetLoader.prototype.load=function(){this.ajaxRequest=new AjaxRequest;var t=this;this.ajaxRequest.onreadystatechange=function(){t.onLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/json"),this.ajaxRequest.send(null)},PIXI.SpriteSheetLoader.prototype.onLoaded=function(){if(4==this.ajaxRequest.readyState&&(200==this.ajaxRequest.status||-1==window.location.href.indexOf("http"))){var jsondata=eval("("+this.ajaxRequest.responseText+")"),textureUrl=this.baseUrl+jsondata.meta.image;this.texture=PIXI.Texture.fromImage(textureUrl,this.crossorigin).baseTexture;var frameData=jsondata.frames;for(var i in frameData){var rect=frameData[i].frame;rect&&(PIXI.TextureCache[i]=new PIXI.Texture(this.texture,{x:rect.x,y:rect.y,width:rect.w,height:rect.h}),frameData[i].trimmed&&(PIXI.TextureCache[i].realSize=frameData[i].spriteSourceSize,PIXI.TextureCache[i].trim.x=0))}if(this.texture.hasLoaded)this.dispatchEvent({type:"loaded",content:this});else{var scope=this;this.texture.addEventListener("loaded",function(){scope.dispatchEvent({type:"loaded",content:scope})})}}},PIXI.AssetLoader=function(t){PIXI.EventTarget.call(this),this.assetURLs=t,this.assets=[],this.crossorigin=!1},PIXI.AssetLoader.constructor=PIXI.AssetLoader,PIXI.AssetLoader.prototype.load=function(){this.loadCount=this.assetURLs.length;for(var t=["jpeg","jpg","png","gif"],e=["json"],i=0;this.assetURLs.length>i;i++){for(var r=this.assetURLs[i],s=r.split(".").pop().toLowerCase(),n=null,h=0;t.length>h;h++)if(s==t[h]){n="img";break}if("img"!=n)for(var h=0;e.length>h;h++)if(s==e[h]){n="atlas";break}if("img"==n){var o=PIXI.Texture.fromImage(r,this.crossorigin);if(o.baseTexture.hasLoaded)this.loadCount--,0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete());else{var a=this;o.baseTexture.addEventListener("loaded",function(){a.onAssetLoaded()}),this.assets.push(o)}}else{if("atlas"!=n)throw Error(r+" is an unsupported file type "+this);var c=new PIXI.SpriteSheetLoader(r);c.crossorigin=this.crossorigin,this.assets.push(c);var a=this;c.addEventListener("loaded",function(){a.onAssetLoaded()}),c.load()}}},PIXI.AssetLoader.prototype.onAssetLoaded=function(){this.loadCount--,this.dispatchEvent({type:"onProgress",content:this}),this.onProgress&&this.onProgress(),0==this.loadCount&&(this.dispatchEvent({type:"onComplete",content:this}),this.onComplete&&this.onComplete())}; \ No newline at end of file diff --git a/docs/api.js b/docs/api.js index 8034e77..601b8ab 100644 --- a/docs/api.js +++ b/docs/api.js @@ -14,6 +14,7 @@ "Sprite", "SpriteSheetLoader", "Stage", + "Text", "Texture", "TilingSprite", "WebGLBatch", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 07f8a3c..514d11c 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 8589dee..f5e26c5 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -128,7 +130,7 @@ @@ -192,7 +194,7 @@ - src/pixi/textures/BaseTexture.js:8 + src/pixi/textures/BaseTexture.js:9

    @@ -244,6 +246,8 @@
  • Index
  • +
  • Methods
  • +
  • Properties
  • @@ -256,6 +260,23 @@

    Item Index

    +
    +

    Methods

    + + +
    +
    @@ -294,6 +315,117 @@
    +
    +

    Methods

    + + +
    +

    fromImage

    + + +
    + (
      + +
    • + + imageUrl + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + static + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:102 + +

    + + + + + +
    + +
    +

    Helper function that returns a base texture based on an image url + If the image is not in the base texture cache it will be created and loaded

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + imageUrl + String + + + + +
      +

      The image url of the texture

      +
      + + +
    • + +
    +
    + + + +
    +

    Returns:

    + +
    + + + BaseTexture + +
    +
    + + + +
    + + +
    +
    @@ -323,7 +455,7 @@ - src/pixi/textures/BaseTexture.js:32 + src/pixi/textures/BaseTexture.js:33

    @@ -367,7 +499,7 @@ - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:40

    @@ -411,7 +543,7 @@ - src/pixi/textures/BaseTexture.js:26 + src/pixi/textures/BaseTexture.js:27

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 489c33a..46f4623 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 190db27..1c7950a 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 145612c..951d88c 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 4459fcf..8b8d77b 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@ @@ -178,7 +180,7 @@ - src/pixi/InteractionManager.js:503 + src/pixi/InteractionManager.js:506

    @@ -317,7 +319,7 @@ - src/pixi/InteractionManager.js:527 + src/pixi/InteractionManager.js:530

    @@ -406,7 +408,7 @@ - src/pixi/InteractionManager.js:509 + src/pixi/InteractionManager.js:512

    @@ -450,7 +452,7 @@ - src/pixi/InteractionManager.js:519 + src/pixi/InteractionManager.js:522

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index d097829..bb1f3cd 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 58fc827..ac7689e 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -1788,7 +1790,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 19b979c..2f47313 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index a32c9d8..810e560 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 42f5a55..78f62de 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -843,7 +845,7 @@ - src/pixi/Sprite.js:113 + src/pixi/Sprite.js:135

    @@ -950,7 +952,7 @@ - src/pixi/Sprite.js:129 + src/pixi/Sprite.js:151

    @@ -1725,7 +1727,7 @@ - src/pixi/Sprite.js:83 + src/pixi/Sprite.js:103

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 2700658..7e95eae 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 906f348..efbf823 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -312,6 +314,13 @@ +
  • + getMousePosition + + + +
  • +
  • mousedown @@ -854,6 +863,77 @@
  • +
    +

    getMousePosition

    + + + () + + + + + Point + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Stage.js:71 + +

    + + + + + +
    + +
    +

    This will return the point containing global coords of the mouse.

    +
    + + + + +
    +

    Returns:

    + +
    + + + Point: + + The point containing the coords of the global InteractionData position. + +
    +
    + + + +
    + +

    mousedown

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html new file mode 100644 index 0000000..016274a --- /dev/null +++ b/docs/classes/Text.html @@ -0,0 +1,2835 @@ + + + + + Text - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Text Class

    +
    + + + +
    + Extends Sprite +
    + + + +
    + Defined in: src/pixi/Text.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    +

    A Text Object will create a line of text

    +
    + + +
    +

    Constructor

    +
    +

    Text

    + + +
    + (
      + +
    • + + text + +
    • + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + text + String + + + + +
      +

      The copy that you would like the text to display

      +
      + + +
    • + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:29 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:51 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:91 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:137 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:97 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:123 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:117 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:103 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:110 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:155 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setStyle

    + + +
    + (
      + +
    • + + fontStyle + +
    • + +
    • + + fillStyle + +
    • + +
    • + + strokeStyle + +
    • + +
    • + + strokeThickness + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Text.js:47 + +

    + + + + + +
    + +
    +

    Set the style of the text

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + fontStyle + String + + + + +
      +

      the style and size of the font eg "bold 20px Arial"

      +
      + + +
    • + +
    • + + fillStyle + Object + + + + +
      +

      a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null

      +
      + + +
    • + +
    • + + strokeStyle + String + + + + +
      +

      a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null

      +
      + + +
    • + +
    • + + strokeThickness + Number + + + + +
      +

      A number that represents the thicknes of the stroke. default is 0 (no stroke)

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    setTexture

    + + +
    + (
      + +
    • + + texture + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:103 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + texture + Texture + + + + +
      +

      The PIXI texture that is displayed by the sprite

      +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:97 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:147 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:153 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:141 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    anchor

    + Point + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:21 + +

    + + + + +
    + +
    +

    The anchor sets the origin point of the texture. +The default is 0,0 this means the textures origin is the top left +Setting than anchor to 0.5,0.5 means the textures origin is centered +Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    +
    + + + + + + +
    + + +
    +

    blendMode

    + Uint + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:38 + +

    + + + + +
    + +
    +

    The blend mode of sprite. +currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    height

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:53 + +

    + + + + +
    + +
    +

    The height of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:48 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    texture

    + Texture + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:31 + +

    + + + + +
    + +
    +

    The texture that the sprite is using

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    +

    width

    + #Number + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + src/pixi/Sprite.js:46 + +

    + + + + +
    + +
    +

    The width of the sprite (this is initially set by the texture)

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 9e4151e..472d2da 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -416,7 +418,7 @@ - src/pixi/textures/Texture.js:162 + src/pixi/textures/Texture.js:158

    @@ -524,7 +526,7 @@ - src/pixi/textures/Texture.js:146 + src/pixi/textures/Texture.js:142

    @@ -627,7 +629,7 @@ - src/pixi/textures/Texture.js:131 + src/pixi/textures/Texture.js:127

    @@ -732,7 +734,7 @@ - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:105

    @@ -835,7 +837,7 @@ - src/pixi/textures/Texture.js:174 + src/pixi/textures/Texture.js:170

    @@ -935,7 +937,7 @@ - src/pixi/textures/Texture.js:75 + src/pixi/textures/Texture.js:83

    @@ -1011,7 +1013,7 @@ - src/pixi/textures/Texture.js:28 + src/pixi/textures/Texture.js:31

    @@ -1055,7 +1057,7 @@ - src/pixi/textures/Texture.js:37 + src/pixi/textures/Texture.js:40

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 08aa1dd..e6cb472 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 3e98b4d..8f678cb 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index 718babb..b538053 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -393,7 +395,7 @@ - src/pixi/renderers/WebGLRenderer.js:160 + src/pixi/renderers/WebGLRenderer.js:187

    @@ -486,7 +488,7 @@ - src/pixi/renderers/WebGLRenderer.js:568 + src/pixi/renderers/WebGLRenderer.js:617

    diff --git a/docs/data.json b/docs/data.json index 8a9c931..be6ea46 100644 --- a/docs/data.json +++ b/docs/data.json @@ -202,6 +202,15 @@ }, "fors": {}, "namespaces": {} + }, + "src/pixi/Text.js": { + "name": "src/pixi/Text.js", + "modules": {}, + "classes": { + "Text": 1 + }, + "fors": {}, + "namespaces": {} } }, "modules": { @@ -225,12 +234,13 @@ "Point": 1, "Rectangle": 1, "Sprite": 1, - "Stage": 1 + "Stage": 1, + "Text": 1 }, "fors": {}, "namespaces": {}, "tag": "module", - "file": "src/pixi/Stage.js", + "file": "src/pixi/Text.js", "line": 5 } }, @@ -418,7 +428,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/textures/BaseTexture.js", - "line": 8, + "line": 9, "description": "A texture stores the information that represents an image. All textures have a base texture", "extends": "EventTarget", "is_constructor": 1, @@ -518,7 +528,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 503, + "line": 506, "is_constructor": 1 }, "MovieClip": { @@ -657,6 +667,49 @@ "type": "Boolean" } ] + }, + "Text": { + "name": "Text", + "shortname": "Text", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Text.js", + "line": 5, + "description": "A Text Object will create a line of text", + "extends": "Sprite", + "is_constructor": 1, + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + }, + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ] } }, "classitems": [ @@ -806,7 +859,7 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 105, + "line": 112, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -822,28 +875,28 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 119, + "line": 126, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 194, + "line": 203, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 229, + "line": 238, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 256, + "line": 267, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1024,21 +1077,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 71, + "line": 73, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 110, + "line": 88, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 160, + "line": 98, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 137, + "access": "private", + "tagname": "", + "class": "WebGLRenderer" + }, + { + "file": "src/pixi/renderers/WebGLRenderer.js", + "line": 187, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -1053,28 +1120,28 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 245, + "line": 284, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 287, + "line": 337, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 490, + "line": 540, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 568, + "line": 617, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -1094,42 +1161,42 @@ }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 593, + "line": 642, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 673, + "line": 722, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 713, + "line": 762, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 741, + "line": 790, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 818, + "line": 867, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/WebGLRenderer.js", - "line": 827, + "line": 876, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1148,7 +1215,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 26, + "line": 27, "description": "[read only] The width of the base texture set when the image has loaded", "itemtype": "property", "name": "width", @@ -1157,7 +1224,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 32, + "line": 33, "description": "[read only] The height of the base texture set when the image has loaded", "itemtype": "property", "name": "height", @@ -1166,7 +1233,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 39, + "line": 40, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -1174,6 +1241,25 @@ "class": "BaseTexture" }, { + "file": "src/pixi/textures/BaseTexture.js", + "line": 102, + "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", + "static": 1, + "itemtype": "method", + "name": "fromImage", + "params": [ + { + "name": "imageUrl", + "description": "The image url of the texture", + "type": "String" + } + ], + "return": { + "description": "BaseTexture" + }, + "class": "BaseTexture" + }, + { "file": "src/pixi/textures/Texture.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1181,7 +1267,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 28, + "line": 31, "description": "The base texture of this texture", "itemtype": "property", "name": "baseTexture", @@ -1190,7 +1276,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 37, + "line": 40, "description": "The frame specifies the region of the base texture that this texture uses", "itemtype": "property", "name": "frame", @@ -1199,7 +1285,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 75, + "line": 83, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -1214,7 +1300,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 105, "description": "Helper function that returns a texture based on an image url\n If the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1233,7 +1319,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 131, + "line": 127, "description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown", "itemtype": "method", "name": "fromFrame", @@ -1251,7 +1337,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 146, + "line": 142, "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1270,7 +1356,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 162, + "line": 158, "description": "Adds a texture to the textureCache.", "itemtype": "method", "name": "addTextureToCache", @@ -1290,7 +1376,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 174, + "line": 170, "description": "Remove a texture from the textureCache.", "itemtype": "method", "name": "removeTextureFromCache", @@ -1755,7 +1841,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 509, + "line": 512, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -1764,7 +1850,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 519, + "line": 522, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -1773,7 +1859,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 527, + "line": 530, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2057,7 +2143,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 83, + "line": 103, "itemtype": "method", "name": "setTexture", "params": [ @@ -2072,7 +2158,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 101, + "line": 119, "access": "private", "tagname": "", "class": "Sprite", @@ -2080,7 +2166,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 113, + "line": 135, "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", @@ -2101,7 +2187,7 @@ }, { "file": "src/pixi/Sprite.js", - "line": 129, + "line": 151, "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", @@ -2149,6 +2235,81 @@ ], "class": "Stage", "module": "PIXI" + }, + { + "file": "src/pixi/Stage.js", + "line": 71, + "description": "This will return the point containing global coords of the mouse.", + "itemtype": "method", + "name": "getMousePosition", + "return": { + "description": "The point containing the coords of the global InteractionData position.", + "type": "Point" + }, + "class": "Stage", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 36, + "description": "Set the copy for the text object", + "methos": "setText", + "params": [ + { + "name": "text", + "description": "The copy that you would like the text to display", + "type": "String" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 47, + "description": "Set the style of the text", + "itemtype": "method", + "name": "setStyle", + "is_constructor": 1, + "params": [ + { + "name": "fontStyle", + "description": "the style and size of the font eg \"bold 20px Arial\"", + "type": "String" + }, + { + "name": "fillStyle", + "description": "a canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\" can also be null", + "type": "Object" + }, + { + "name": "strokeStyle", + "description": "a canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\" can also be null", + "type": "String" + }, + { + "name": "strokeThickness", + "description": "A number that represents the thicknes of the stroke. default is 0 (no stroke)", + "type": "Number" + } + ], + "class": "Text", + "module": "PIXI" + }, + { + "file": "src/pixi/Text.js", + "line": 66, + "access": "private", + "tagname": "", + "class": "Text", + "module": "PIXI" } ], "warnings": [ @@ -2161,6 +2322,10 @@ "line": " src/pixi/Stage.js:37" }, { + "message": "unknown tag: methos", + "line": " src/pixi/Text.js:36" + }, + { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" }, @@ -2194,23 +2359,23 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " src/pixi/renderers/CanvasRenderer.js:105" + "line": " src/pixi/renderers/CanvasRenderer.js:112" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:119" + "line": " src/pixi/renderers/CanvasRenderer.js:126" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:194" + "line": " src/pixi/renderers/CanvasRenderer.js:203" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:229" + "line": " src/pixi/renderers/CanvasRenderer.js:238" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:256" + "line": " src/pixi/renderers/CanvasRenderer.js:267" }, { "message": "Missing item type", @@ -2242,47 +2407,55 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:71" + "line": " src/pixi/renderers/WebGLRenderer.js:73" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:110" + "line": " src/pixi/renderers/WebGLRenderer.js:88" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:245" + "line": " src/pixi/renderers/WebGLRenderer.js:98" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:287" + "line": " src/pixi/renderers/WebGLRenderer.js:137" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:490" + "line": " src/pixi/renderers/WebGLRenderer.js:284" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:593" + "line": " src/pixi/renderers/WebGLRenderer.js:337" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:673" + "line": " src/pixi/renderers/WebGLRenderer.js:540" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:713" + "line": " src/pixi/renderers/WebGLRenderer.js:642" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:741" + "line": " src/pixi/renderers/WebGLRenderer.js:722" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:818" + "line": " src/pixi/renderers/WebGLRenderer.js:762" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderer.js:827" + "line": " src/pixi/renderers/WebGLRenderer.js:790" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:867" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/WebGLRenderer.js:876" }, { "message": "Missing item type", @@ -2354,11 +2527,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/Sprite.js:101" + "line": " src/pixi/Sprite.js:119" }, { "message": "Missing item type", "line": " src/pixi/Stage.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:1" + }, + { + "message": "Missing item type\nSet the copy for the text object", + "line": " src/pixi/Text.js:36" + }, + { + "message": "Missing item type", + "line": " src/pixi/Text.js:66" } ] } \ No newline at end of file diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index 867cdd0..efea908 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index ef8d6fb..fd35a09 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 20d50ab..d1ff0d4 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -438,13 +440,16 @@ var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - var x1 = -item.width * item.anchor.x; + var width = item.texture.frame.width; + var height = item.texture.frame.height; - if(x > x1 && x < x1 + item.width) + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) { - var y1 = -item.height * item.anchor.y; + var y1 = -height * item.anchor.y; - if(y > y1 && y < y1 + item.height) + if(y > y1 && y < y1 + height) { return true; } diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index ee15c94..85c10a7 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 2a33f74..445cd7a 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 64fbb42..be61b09 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 43a6ce7..7c87291 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index 06b4a40..3fdab5f 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -170,19 +172,17 @@ * @property width * @type #Number */ - this.width = 0; + this._width = 0; /** * The height of the sprite (this is initially set by the texture) * @property height * @type #Number */ - this.height = 0; + this._height = 0; if(texture.baseTexture.hasLoaded) { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; this.updateFrame = true; } else @@ -202,6 +202,28 @@ PIXI.Sprite.constructor = PIXI.Sprite; PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +// OOH! shiney new getters and setters for width and height +// The width and height now modify the scale (this is what flash does, nice and tidy!) +Object.defineProperty(PIXI.Sprite.prototype, 'width', { + get: function() { + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width + this._width = value; + } +}); + +Object.defineProperty(PIXI.Sprite.prototype, 'height', { + get: function() { + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height + this._height = value; + } +}); + /** @method setTexture @param texture {Texture} The PIXI texture that is displayed by the sprite @@ -215,8 +237,6 @@ } this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; this.updateFrame = true; } @@ -225,8 +245,12 @@ */ PIXI.Sprite.prototype.onTextureUpdate = function(event) { - this.width = this.width || this.texture.frame.width; - this.height = this.height || this.texture.frame.height; + //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); + + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + this.updateFrame = true; } diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index 09ff992..f5adb58 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -190,6 +192,16 @@ this.backgroundColorString = "#" + this.backgroundColor.toString(16); } +/** + * This will return the point containing global coords of the mouse. + * @method getMousePosition + * @return {Point} The point containing the coords of the global InteractionData position. + */ +PIXI.Stage.prototype.getMousePosition = function() +{ + return this.interactionManager.mouse.global; +} + PIXI.Stage.prototype.__addChild = function(child) { if(child.interactive)this.dirty = true; diff --git a/docs/files/src_pixi_Text.js.html b/docs/files/src_pixi_Text.js.html new file mode 100644 index 0000000..f25914b --- /dev/null +++ b/docs/files/src_pixi_Text.js.html @@ -0,0 +1,292 @@ + + + + + src/pixi/Text.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Text.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A Text Object will create a line of text
    + * @class Text
    + * @extends Sprite
    + * @constructor
    + * @param text {String} The copy that you would like the text to display
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.canvas = document.createElement("canvas");
    +	
    +	this.context = this.canvas.getContext("2d");
    +	//document.body.appendChild(this.canvas);
    +	this.setText(text);
    +	this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness);
    +	
    +	this.updateText();
    +	
    +	PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas));
    +	
    +	// need to store a canvas that can
    +}
    +
    +// constructor
    +PIXI.Text.constructor = PIXI.Text;
    +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype );
    +
    +/**
    + * Set the copy for the text object
    + * @methos setText
    + * @param text {String} The copy that you would like the text to display
    + */
    +PIXI.Text.prototype.setText = function(text)
    +{
    +	this.text = text || " ";
    +	this.dirty = true;
    +}
    +
    +/**
    + * Set the style of the text
    + * @method setStyle
    + * @constructor
    + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial"
    + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null
    + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null
    + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke)
    + */
    +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness)
    +{
    +	this.fontStyle = fontStyle || "bold 20pt Arial";
    +	this.fillStyle = fillStyle;
    +	this.strokeStyle = strokeStyle;
    +	this.strokeThickness = strokeThickness || 0;
    +	
    +	this.dirty = true;
    +}
    +
    +/**
    + * @private
    + */
    +PIXI.Text.prototype.updateText = function()
    +{
    +//	console.log(this.text);
    +	this.context.font = this.fontStyle;
    +		
    +	this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width;
    +	this.canvas.height = this.determineFontHeight("font: " + this.fontStyle  + ";")+ this.strokeThickness;// textDimensions.height;
    +
    +	this.context.fillStyle = this.fillStyle;
    +	this.context.font = this.fontStyle;
    +	
    +    this.context.strokeStyle = this.strokeStyle;
    +	this.context.lineWidth = this.strokeThickness;
    +
    +	this.context.textBaseline="top"; 
    +
    +	if(this.fillStyle)this.context.fillText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +    if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text,  this.strokeThickness/2, this.strokeThickness/2);
    +	
    +	
    +//	console.log("//")
    +}
    +
    +PIXI.Text.prototype.updateTransform = function()
    +{
    +	if(this.dirty)
    +	{
    +		this.updateText();	
    +		
    +		// update the texture..
    +		this.texture.baseTexture.width = this.canvas.width;
    +		this.texture.baseTexture.height = this.canvas.height;
    +		this.texture.frame.width = this.canvas.width;
    +		this.texture.frame.height = this.canvas.height;
    +		
    +		PIXI.texturesToUpdate.push(this.texture.baseTexture);
    +		this.dirty = false;
    +	}
    +	
    +	PIXI.Sprite.prototype.updateTransform.call( this );
    +}
    +
    +/*
    + * http://stackoverflow.com/users/34441/ellisbben
    + * great solution to the problem!
    + */
    +PIXI.Text.prototype.determineFontHeight = function(fontStyle) 
    +{
    +	// build a little refference dictionary so if the font style has been used return a
    +	// cached version...
    +	var result = PIXI.Text.heightCache[fontStyle]
    +	
    +	if(!result)
    +	{
    +		var body = document.getElementsByTagName("body")[0];
    +		var dummy = document.createElement("div");
    +		var dummyText = document.createTextNode("M");
    +		dummy.appendChild(dummyText);
    +		dummy.setAttribute("style", fontStyle);
    +		body.appendChild(dummy);
    +		
    +		result = dummy.offsetHeight;
    +		PIXI.Text.heightCache[fontStyle] = result
    +		
    +		body.removeChild(dummy);
    +	}
    +	
    +	return result;
    +};
    +
    +PIXI.Text.prototype.destroy = function(destroyTexture)
    +{
    +	if(destroyTexture)
    +	{
    +		this.texture.destroy();
    +	}
    +		
    +}
    +
    +PIXI.Text.heightCache = {};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 1598c84..7e2ceff 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index dd78335..8f748c2 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 0c0fab6..af3d84d 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index 6bfbe61..089d5cf 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index fcef4fe..5510866 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index 06232e9..5598bbd 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -199,6 +201,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -222,6 +225,12 @@ stage.interactionManager.setTarget(this); } } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } } /** @@ -290,8 +299,8 @@ frame.height, (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, - displayObject.width, - displayObject.height); + frame.width, + frame.height); //} } } @@ -311,6 +320,8 @@ { this.renderDisplayObject(displayObject.children[i]); } + + } /** @@ -371,6 +382,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index c3716f2..17824ca 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -536,8 +538,8 @@ while(displayObject) { - width = displayObject.width; - height = displayObject.height; + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; aX = displayObject.anchor.x - displayObject.texture.trim.x aY = displayObject.anchor.y - displayObject.texture.trim.y @@ -570,7 +572,7 @@ this.verticies[index + 6] = a * w1 + c * h0 + tx; this.verticies[index + 7] = d * h0 + b * w1 + ty; - if(displayObject.updateFrame) + if(displayObject.updateFrame || displayObject.texture.updateFrame) { this.dirtyUVS = true; diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 1d57ca5..0a39149 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -142,6 +144,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -191,6 +195,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -307,12 +336,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -362,6 +392,17 @@ stage.interactionManager.setTarget(this); } } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } } /** @@ -406,12 +447,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -552,7 +604,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -576,7 +628,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -635,7 +687,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -660,7 +711,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -672,8 +723,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -681,7 +732,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 8c35fca..4ab43d4 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index ee7d344..a7d8f96 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -126,6 +128,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -208,9 +211,43 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; -PIXI.BaseTexture.prototype.fromImage = function(imageUrl) +PIXI.BaseTexture.prototype.destroy = function() { + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; } diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 6040d6b..35f12dc 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -146,6 +148,9 @@ } this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; /** * The base texture of this texture @@ -194,6 +199,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -209,7 +219,11 @@ { throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } - //this.updateFrame = true; + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); } /** @@ -227,24 +241,8 @@ if(!texture) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - var image = new Image();//new Image(); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } - texture = new PIXI.Texture(baseTexture); - - + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); PIXI.TextureCache[imageUrl] = texture; - - } return texture; @@ -307,6 +305,9 @@ return texture; } +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; +
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 5ab04d1..6b7d031 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index b1660b1..929e6eb 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 8ec8708..c6b3b43 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/index.html b/docs/index.html index 9d5c909..36c00da 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 0f6403b..3cf7051 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -67,6 +67,8 @@
  • Stage
  • +
  • Text
  • +
  • Texture
  • TilingSprite
  • @@ -124,7 +126,7 @@
    - Defined in: src/pixi/Stage.js:5 + Defined in: src/pixi/Text.js:5
    @@ -225,6 +227,12 @@
  • + + Text + +
  • + +
  • Texture diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html index 805dadf..543a6db 100644 --- a/examples/example 1 - Basics/index.html +++ b/examples/example 1 - Basics/index.html @@ -10,7 +10,7 @@ } - + + + + + + + diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js new file mode 100644 index 0000000..7e34e08 --- /dev/null +++ b/examples/example 10 - Text/pixi.js @@ -0,0 +1,4798 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-04-24 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.cacheVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their 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 displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x; + localTransform[5] = this.position.y; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child) + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + if(this.stage) + { + this.stage.__addChild(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage)this.stage.__removeChild(child); + child.parent = undefined; + //child.childIndex = 0 + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @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 = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + + { + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.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.update = function() +{ + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = true; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(!item.__isOver) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.buttonMode)this.target.view.style.cursor = "default"; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +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 length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // --->--->--->---> + // get interactive items under point?? + // --->--->--->---> + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + 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); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +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); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +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 length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +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]; + var up = false; + 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 length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // 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 is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + 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); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@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, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create()//.//identity(); + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + this.checkVisibility(child, actualVisibility); + } + }; +} + + +/** + * Renders the stage to its webGL view + * @method render + * @param stage {Stage} the PIXI.Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + if(this.contextLost)return; + + + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + if(this.__stage)this.checkVisibility(this.__stage, false) + this.__stage = stage; + } + + // update children if need be + // best to remove first! + for (var i=0; i < stage.__childrenRemoved.length; i++) + { + this.removeDisplayObject(stage.__childrenRemoved[i]); + } + + + + // update any textures + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + + // empty out the arrays + stage.__childrenRemoved = []; + stage.__childrenAdded = []; + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + // recursivly loop through all items! + this.checkVisibility(stage, true); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + gl.clear(gl.COLOR_BUFFER_BIT) + + gl.clearColor(stage.backgroundColorSplit[0], stage.backgroundColorSplit[1], stage.backgroundColorSplit[2], 0); + + + // set the correct blend mode! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // render all the batchs! + + + var renderable; + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable); + } + } + + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // after rendering lets confirm all frames that have been uodated.. + if(PIXI.Texture.frameUpdates.length > 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + var gl = this.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + // gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + this.refreshBatchs = true; +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) +{ + var objectDetaildisplayObject + if(!displayObject.stage)return; // means it was removed + if(displayObject.__inWebGL)return; //means it is already in webgL + + //displayObject.cacheVisible = displayObject.visible; + + // TODO if objects parent is not visible then dont add to stage!!!! + //if(!displayObject.visible)return; + + + displayObject.batch = null; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + displayObject.__inWebGL = true; + + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + + } + else + { + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == displayObject.stage)break; + } + while(!previousSprite.renderable || !previousSprite.__inWebGL) + //while(!(previousSprite instanceof PIXI.Sprite)) + + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + if(nextSprite == displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__inWebGL) + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = this.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = this.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.removeDisplayObject = function(displayObject) +{ + //if(displayObject.stage)return; + displayObject.cacheVisible = false;//displayObject.visible; + + if(!displayObject.renderable)return; + + displayObject.__inWebGL = false; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + } + + +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initTilingSprite = function(sprite) +{ + + + + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } + + /* + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.translate(-tilePosition.x, -tilePosition.y); + context.scale(1/tileScale.x, 1/tileScale.y); + */ +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderTilingSprite = function(sprite) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x///sprite.texture.baseTexture.width; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y///sprite.texture.baseTexture.height; + // + //sprite.dirty = true; + sprite.uvs[0] = 0 + offsetX + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) +offsetX + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) + offsetX + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 + offsetX + sprite.uvs[7] = (1 *scaleY) - offsetY; + + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite); + +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.renderStrip = function(strip) +{ + var gl = this.gl; + var shaderProgram = this.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(this.projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, this.projectionMatrix); + + // console.log("!!!") +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + aX = displayObject.anchor.x - displayObject.texture.trim.x + aY = displayObject.anchor.y - displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function() +{ + if(this.dirty) + { + this.refresh(); + this.dirty = false; + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + if(this.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + var shaderProgram = PIXI.shaderProgram; + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, this.size * 6, gl.UNSIGNED_SHORT, 0); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + stage.__childrenAdded = []; + stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + this.context.setTransform(1,0,0,1,0,0); + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + 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); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(2,1); + /** + * The offset position of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + //console.log(">!!",this.width) + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * 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) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() + * This loader will also load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * @class SpriteSheetLoader + * @extends EventTarget + * @constructor + * @param url {String} the url of the sprite sheet JSON file + */ + +PIXI.SpriteSheetLoader = function(url) +{ + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ + PIXI.EventTarget.call( this ); + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.texture; + this.frames = {}; + this.crossorigin = false; +} + +// constructor +PIXI.SpriteSheetLoader.constructor = PIXI.SpriteSheetLoader; + +/** + * This will begin loading the JSON file + */ +PIXI.SpriteSheetLoader.prototype.load = function() +{ + this.ajaxRequest = new AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange=function() + { + scope.onLoaded(); + } + + this.ajaxRequest.open("GET", this.url, true) + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); + this.ajaxRequest.send(null) +} + +PIXI.SpriteSheetLoader.prototype.onLoaded = function() +{ + if (this.ajaxRequest.readyState==4) + { + if (this.ajaxRequest.status==200 || window.location.href.indexOf("http")==-1) + { + var jsondata = eval("("+this.ajaxRequest.responseText+")"); + + var textureUrl = this.baseUrl + jsondata.meta.image; + + this.texture = PIXI.Texture.fromImage(textureUrl, this.crossorigin).baseTexture; + + // if(!this.texture)this.texture = new PIXI.Texture(textureUrl); + + var frameData = jsondata.frames; + for (var i in frameData) + { + var rect = frameData[i].frame; + if (rect) + { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); + + if(frameData[i].trimmed) + { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0// (realSize.x / rect.w) + // calculate the offset! + } + // this.frames[i] = ; + } + } + + if(this.texture.hasLoaded) + { + this.dispatchEvent( { type: 'loaded', content: this } ); + } + else + { + var scope = this; + // wait for the texture to load.. + this.texture.addEventListener('loaded', function(){ + + scope.dispatchEvent( { type: 'loaded', content: scope } ); + + }); + } + } + } + +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Class that loads a bunch of images / sprite sheet files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromFrame(), PIXI.Texture.fromImage() and PIXI.Sprite.fromImage(), PIXI.Sprite.fromFromeId() + * When all items have been loaded this class will dispatch a 'loaded' event + * As each individual item is loaded this class will dispatch a 'progress' event + * @class AssetLoader + * @constructor + * @extends EventTarget + * @param assetURLs {Array} an array of image/sprite sheet urls that you would like loaded supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported sprite sheet data formats only include "JSON" at this time + */ +PIXI.AssetLoader = function(assetURLs) +{ + PIXI.EventTarget.call( this ); + + /** + * The array of asset URLs that are going to be loaded + * @property assetURLs + * @type Array + */ + this.assetURLs = assetURLs; + + this.assets = []; + + this.crossorigin = false; +} + +/** +Fired when an item has loaded +@event onProgress +**/ + +/** +Fired when all the assets have loaded +@event onComplete +**/ + +// constructor +PIXI.AssetLoader.constructor = PIXI.AssetLoader; + +/** + * This will begin loading the assets sequentially + */ +PIXI.AssetLoader.prototype.load = function() +{ + this.loadCount = this.assetURLs.length; + var imageTypes = ["jpeg", "jpg", "png", "gif"]; + + var spriteSheetTypes = ["json"]; + + for (var i=0; i < this.assetURLs.length; i++) + { + var filename = this.assetURLs[i]; + var fileType = filename.split('.').pop().toLowerCase(); + // what are we loading? + var type = null; + + for (var j=0; j < imageTypes.length; j++) + { + if(fileType == imageTypes[j]) + { + type = "img"; + break; + } + } + + if(type != "img") + { + for (var j=0; j < spriteSheetTypes.length; j++) + { + if(fileType == spriteSheetTypes[j]) + { + type = "atlas"; + break; + } + } + } + + if(type == "img") + { + + var texture = PIXI.Texture.fromImage(filename, this.crossorigin); + if(!texture.baseTexture.hasLoaded) + { + + var scope = this; + texture.baseTexture.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + this.assets.push(texture); + } + else + { + + // already loaded! + this.loadCount--; + // if this hits zero here.. then everything was cached! + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } + } + + } + else if(type == "atlas") + { + var spriteSheetLoader = new PIXI.SpriteSheetLoader(filename); + spriteSheetLoader.crossorigin = this.crossorigin; + this.assets.push(spriteSheetLoader); + + var scope = this; + spriteSheetLoader.addEventListener( 'loaded', function ( event ) + { + scope.onAssetLoaded(); + }); + + spriteSheetLoader.load(); + } + else + { + // dont know what the file is! :/ + //this.loadCount--; + throw new Error(filename + " is an unsupported file type " + this); + } + + //this.assets[i].load(); + }; +} + +PIXI.AssetLoader.prototype.onAssetLoaded = function() +{ + this.loadCount--; + this.dispatchEvent( { type: 'onProgress', content: this } ); + if(this.onProgress)this.onProgress(); + + if(this.loadCount == 0) + { + this.dispatchEvent( { type: 'onComplete', content: this } ); + if(this.onComplete)this.onComplete(); + } +} + diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 2 - SpriteSheet/pixi.js +++ b/examples/example 2 - SpriteSheet/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 3 - MovieClip/pixi.js b/examples/example 3 - MovieClip/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 3 - MovieClip/pixi.js +++ b/examples/example 3 - MovieClip/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 4 - Balls/pixi.js b/examples/example 4 - Balls/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 4 - Balls/pixi.js +++ b/examples/example 4 - Balls/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 5 - Morph/pixi.js b/examples/example 5 - Morph/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 5 - Morph/pixi.js +++ b/examples/example 5 - Morph/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 6 - Interactivity/pixi.js +++ b/examples/example 6 - Interactivity/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 7 - Transparent Background/pixi.js b/examples/example 7 - Transparent Background/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 7 - Transparent Background/pixi.js +++ b/examples/example 7 - Transparent Background/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 8 - Dragging/pixi.js b/examples/example 8 - Dragging/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 8 - Dragging/pixi.js +++ b/examples/example 8 - Dragging/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/examples/example 9 - Tiling Texture/pixi.js b/examples/example 9 - Tiling Texture/pixi.js index 78094b3..7e34e08 100644 --- a/examples/example 9 - Tiling Texture/pixi.js +++ b/examples/example 9 - Tiling Texture/pixi.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-04-22 + * Compiled: 2013-04-24 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -832,6 +832,155 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + /** @@ -1980,6 +2129,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -2029,6 +2180,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -2145,12 +2321,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -2255,12 +2432,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -2401,7 +2589,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -2425,7 +2613,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -2484,7 +2672,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -2509,7 +2696,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -2521,8 +2708,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -2530,7 +2717,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } @@ -3460,6 +3647,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -3640,6 +3828,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } @@ -4044,6 +4234,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -4126,6 +4317,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url @@ -4230,6 +4433,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -4268,7 +4476,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; } diff --git a/src/pixi/Text.js b/src/pixi/Text.js new file mode 100644 index 0000000..beadfc9 --- /dev/null +++ b/src/pixi/Text.js @@ -0,0 +1,148 @@ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line of text + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text = function(text, fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.canvas = document.createElement("canvas"); + + this.context = this.canvas.getContext("2d"); + //document.body.appendChild(this.canvas); + this.setText(text); + this.setStyle(fontStyle, fillStyle, strokeStyle, strokeThickness); + + this.updateText(); + + PIXI.Sprite.call( this, PIXI.Texture.fromCanvas(this.canvas)); + + // need to store a canvas that can +} + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create( PIXI.Sprite.prototype ); + +/** + * Set the copy for the text object + * @methos setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +} + +/** + * Set the style of the text + * @method setStyle + * @constructor + * @param fontStyle {String} the style and size of the font eg "bold 20px Arial" + * @param fillStyle {Object} a canvas fillstyle that will be used on the text eg "red", "#00FF00" can also be null + * @param strokeStyle {String} a canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" can also be null + * @param strokeThickness {Number} A number that represents the thicknes of the stroke. default is 0 (no stroke) + */ +PIXI.Text.prototype.setStyle = function(fontStyle, fillStyle, strokeStyle, strokeThickness) +{ + this.fontStyle = fontStyle || "bold 20pt Arial"; + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.strokeThickness = strokeThickness || 0; + + this.dirty = true; +} + +/** + * @private + */ +PIXI.Text.prototype.updateText = function() +{ +// console.log(this.text); + this.context.font = this.fontStyle; + + this.canvas.width = this.context.measureText(this.text).width + this.strokeThickness//textDimensions.width; + this.canvas.height = this.determineFontHeight("font: " + this.fontStyle + ";")+ this.strokeThickness;// textDimensions.height; + + this.context.fillStyle = this.fillStyle; + this.context.font = this.fontStyle; + + this.context.strokeStyle = this.strokeStyle; + this.context.lineWidth = this.strokeThickness; + + this.context.textBaseline="top"; + + if(this.fillStyle)this.context.fillText(this.text, this.strokeThickness/2, this.strokeThickness/2); + if(this.strokeStyle && this.strokeThickness)this.context.strokeText(this.text, this.strokeThickness/2, this.strokeThickness/2); + + +// console.log("//") +} + +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + + // update the texture.. + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call( this ); +} + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little refference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle] + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result + + body.removeChild(dummy); + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +} + +PIXI.Text.heightCache = {}; diff --git a/src/pixi/renderers/CanvasRenderer.js b/src/pixi/renderers/CanvasRenderer.js index fd36d1c..e07b399 100644 --- a/src/pixi/renderers/CanvasRenderer.js +++ b/src/pixi/renderers/CanvasRenderer.js @@ -77,6 +77,7 @@ // update textures if need be PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; this.context.setTransform(1,0,0,1,0,0); stage.updateTransform(); @@ -257,6 +258,8 @@ context.scale(1/tileScale.x, 1/tileScale.y); context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); } diff --git a/src/pixi/renderers/WebGLRenderer.js b/src/pixi/renderers/WebGLRenderer.js index f10d563..2089718 100644 --- a/src/pixi/renderers/WebGLRenderer.js +++ b/src/pixi/renderers/WebGLRenderer.js @@ -20,6 +20,8 @@ */ PIXI.WebGLRenderer = function(width, height, view, transparent) { + // do a catch.. only 1 webGL renderer.. + //console.log(transparent) this.transparent = !!transparent; @@ -69,6 +71,31 @@ PIXI.WebGLRenderer.constructor = PIXI.WebGLRenderer; /** + * @private + */ +PIXI.WebGLRenderer.prototype.getBatch = function() +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(this.gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + + +/** * @private */ PIXI.WebGLRenderer.prototype.initShaders = function() @@ -185,12 +212,13 @@ // update any textures for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); // empty out the arrays stage.__childrenRemoved = []; stage.__childrenAdded = []; PIXI.texturesToUpdate = []; - + PIXI.texturesToDestroy = []; // recursivly loop through all items! this.checkVisibility(stage, true); @@ -295,12 +323,23 @@ this.refreshBatchs = true; } +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + /** * @private */ PIXI.WebGLRenderer.prototype.addDisplayObject = function(displayObject) { - + var objectDetaildisplayObject if(!displayObject.stage)return; // means it was removed if(displayObject.__inWebGL)return; //means it is already in webgL @@ -441,7 +480,7 @@ * seems the new sprite is in the middle of a batch * lets split it.. */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); var index = this.batchs.indexOf( previousBatch ); batch.init(displayObject); @@ -465,7 +504,7 @@ * time to create anew one! */ - var batch = PIXI._getBatch(this.gl); + var batch = this.getBatch(); batch.init(displayObject); if(previousBatch) // if this is invalid it means @@ -524,7 +563,6 @@ batch.remove(displayObject); - if(batch.size==0) { batchToRemove = batch @@ -549,7 +587,7 @@ { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); return; } @@ -561,8 +599,8 @@ //console.log("MERGE") this.batchs[index-1].merge(this.batchs[index+1]); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); - PIXI._returnBatch(this.batchs[index+1]); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); + this.returnBatch(this.batchs[index+1]); this.batchs.splice(index, 2); return; } @@ -570,7 +608,7 @@ this.batchs.splice(index, 1); - if(batchToRemove instanceof PIXI.WebGLBatch)PIXI._returnBatch(batchToRemove); + if(batchToRemove instanceof PIXI.WebGLBatch)this.returnBatch(batchToRemove); } diff --git a/src/pixi/textures/BaseTexture.js b/src/pixi/textures/BaseTexture.js index 58630d7..763c49f 100644 --- a/src/pixi/textures/BaseTexture.js +++ b/src/pixi/textures/BaseTexture.js @@ -4,6 +4,7 @@ PIXI.BaseTextureCache = {}; PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; /** * A texture stores the information that represents an image. All textures have a base texture @@ -86,6 +87,18 @@ PIXI.BaseTexture.constructor = PIXI.BaseTexture; +PIXI.BaseTexture.prototype.destroy = function() +{ + + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + + /** * * Helper function that returns a base texture based on an image url diff --git a/src/pixi/textures/Texture.js b/src/pixi/textures/Texture.js index 95ed535..dfa9972 100644 --- a/src/pixi/textures/Texture.js +++ b/src/pixi/textures/Texture.js @@ -75,6 +75,11 @@ this.scope.dispatchEvent( { type: 'update', content: this } ); } +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + /** * Specifies the rectangle region of the baseTexture * @method setFrame @@ -113,7 +118,6 @@ if(!texture) { texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; }